home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-03-05 | 1.4 KB | 36 lines | [TEXT/Help] |
- {Programming with unknowns: divide each tree leaf be the sum of the leafs in 1 pass}
-
-
- (define (rbm l)
- (letrec [((f n rest&maxc)(cons (cons max (0 rest&maxc))
- (cond (>? n (-1 rest&maxc)) n (-1 rest&maxc))))
- (rest (reduce f '(() | 0) l))
- (max (-1 rest))]
- (0 rest)))
-
-
- (define (rbm l)
- (call/ep (lambda (k)
- (letrec [((f n rest&maxc) (cons (cons max (0 rest&maxc))
- (cond (>? n (-1 rest&maxc)) n (-1 rest&maxc))))
- (rest (reduce f '(() | 0) l))
- (max (-1 rest))]
- (k (0 rest))))))
- (define feuille? number?) (define vide? null?) ;test des arbres
- (define filsg 0) (define filsd -1) ;lecture d’un arbre
- (define retourne cons) ;former une valeur multiple
- (define traité 0) (define somme -1) ;lecture d’une valeur multiple
-
- (define (normalise arbre)
- (letrec [((norm+som arbre)
- (cond (vide? arbre) (retourne () 0)
- (feuille? arbre) (retourne (/ arbre SomTotale) arbre)
- (let [(gauche (norm+som (filsg arbre)))
- (droite (norm+som (filsd arbre)))]
- (retourne (cons (traité gauche) (traité droite))
- (+ (somme gauche) (somme droite))))))
- (LesDeux (norm+som arbre))
- (ArbreTraité (traité LesDeux))
- (SomTotale (somme LesDeux))]
- ArbreTraité))
-